#1.百分制转换为等级成绩，键盘输入成绩，转换等级成绩
def convert_score_to_grade(score):
    if 90 <= score <= 100:
        return 'A'
    elif 80 <= score < 90:
        return 'B'
    elif 70 <= score < 80:
        return 'C'
    elif 60 <= score < 70:
        return 'D'
    elif 0 <= score < 60:
        return 'E'
    else:
        raise ValueError("成绩异常，请输入0-100之间的整数")

def main():
    while True:
        try:
            score = int(input("请输入成绩（0-100）："))
            grade = convert_score_to_grade(score)
            print(f"成绩 {score} 对应的等级是：{grade}")
            break  # 输入有效成绩后退出循环
        except ValueError as e:
            print(f"输入错误：{e}")
            continue  # 输入异常时继续循环请求输入
        finally:
            # 这里可以添加一些清理工作，但在这个简单的程序中我们不需要
            pass
if __name__ == "__main__":
    main()


#2.输入年份，判断平年或者闰年，同时用异常处理完善程序
def is_leap_year(year):
    if year % 4 != 0:
        return False
    elif year % 100 != 0:
        return True
    elif year % 400 != 0:
        return False
    else:
        return True

def main():
    while True:
        try:
            year = int(input("请输入年份："))
            if is_leap_year(year):
                print(f"{year} 是闰年")
            else:
                print(f"{year} 是平年")
            break  # 输入有效年份后退出循环
        except ValueError:
            print("输入错误，请输入一个有效的年份（整数）")

if __name__ == "__main__":
    main()

#3.字符串练习
str='I love python'
#1）截取从2~5位置的字符串
print(str[2:6])
#2）截取从2~末尾位置的字符串
print(str[2:])
#3）截取从开始~5位置的字符串
print(str[:6])
#4）截取完整的字符串
print(str)
#5)从开始位置，每隔一个字符截取字符串
print(str[::2])
#6)从索引 1开始，每隔一个取一个
print(str[1::2])
#7) 截取从 2~ 末尾 - 1 的字符串
print(str[2:-1])
#8)截取字符串末尾两个字符
print(str[-2:])
#9)字符串的逆序(面试题)
print(str[::-1])

#4.将字符串中单词和单词出现的次数分别保存到一种数据结构中(可以是字典、列表、元组)
# s = 'life is short we need python life is short we need python
def count_words_in_string(s):
    # 将字符串转换为小写并分割成单词列表
    words = s.lower().split()
    # 创建一个字典来保存单词及其出现的次数
    word_counts = {}
    # 遍历单词列表，统计每个单词出现的次数
    for word in words:
        # 如果单词已经在字典中，则增加计数
        if word in word_counts:
            word_counts[word] += 1
        # 如果单词不在字典中，则添加到字典并设置计数为1
        else:
            word_counts[word] = 1
    # 返回包含单词及其出现次数的字典
    return word_counts
# 给定的字符串
s = 'life is short we need python life is short we need python'
# 调用函数并打印结果
word_counts = count_words_in_string(s)
print(word_counts)


#5、给定一个长字符串，进行词频统计，给出top(10)的出现次数。
from collections import Counter
import re
def top_n_words(text, n):
    # 使用正则表达式将文本分解成单词
    # 这个正则表达式匹配字母数字字符，并考虑到了常见的标点符号
    words = re.findall(r'\b\w+\b', text.lower())
    # 使用Counter进行词频统计
    word_counts = Counter(words)
    # 获取出现次数最多的前n个单词
    top_words = word_counts.most_common(n)
    return top_words
# 示例字符串
text = "This is a sample text for word frequency analysis. This text contains some words that appear more often than others. We want to find the top 10 most frequent words in this text."

# 获取前10个最常出现的单词及其次数
top_10_words = top_n_words(text, 10)
# 打印结果
for word, count in top_10_words:
    print(f"{word}: {count}")

